package com.wanggsx.library.base.app;

import android.app.Application;
import androidx.multidex.MultiDex;
import com.wanggsx.library.base.app.init.AppConstant;
import com.wanggsx.library.base.app.needextends.SuperAppInstance;
import com.wanggsx.library.base.http.HttpClient;
import com.wanggsx.library.util.MethodsNetwork;
import com.wanggsx.library.util.Utils;
import com.wanggsx.library.util.UtilsCrash;
import cn.jpush.android.api.JPushInterface;

/**
 * App模块的自定义Application必须继承此类
 * */
public abstract class BaseApplication extends Application {

    /**
     * 已集成功能：
     * CrashHandler
     * Retrofit
     * RxJava
     * Glide
     *
     * 可选集成功能：
     * JPush
     *
     *
     * 未集成功能：
     *
     *
     *
     * */
    @Override
    public void onCreate() {
        super.onCreate();
        MultiDex.install(this);
        SuperAppInstance.appInstance = this;
        //设置文件夹名
        AppConstant.folderName = getAppFolder();
        //设置接口域名
        AppConstant.netWorkPrifix = getNetWorkUrlPrifx();
        Utils.init(this);
        HttpClient.init();
        initDatas();
        UtilsCrash.init(getApplicationContext());
        //刷新网络
        MethodsNetwork.refreshAPNType(this, null);
        if (isEnableJpushKey()) {
            //极光的初始化
            JPushInterface.setDebugMode(true);
            JPushInterface.init(this);
        }
    }

    /**
     * app文件夹名
     * 格式如：return "/appFolder/";
     */
    public abstract String getAppFolder();

    /**
     * 网络请求开头部分
     * 格式如：return "http://www.abc.com/";
     */
    public abstract String getNetWorkUrlPrifx();

    /**
     * 是否初始化极光推送插件
     */
    public abstract boolean isEnableJpushKey();

    /**
     * 用于做一些注册类初始化操作
     * 对于可以在子线程中进行的操作尽量在子线程中进行
     */
    public abstract void initDatas();

}
